package com.sws.capture.util;

import java.util.Date;
import java.util.Calendar;
import java.util.TimeZone;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * 时间戳转换工具类（支持北京时间）
 */
public class TimestampConverterUtil {
    
    // 北京时区（UTC+8）
    private static final TimeZone BEIJING_TIME_ZONE = TimeZone.getTimeZone("Asia/Shanghai");
    
    /**
     * 将UNIX时间戳转换为完整的北京时间（年月日 时分秒）
     * @param timestamp 时间戳（秒）
     * @return 北京时间对应的Date对象
     */
    public static Date toBeijingDateTime(Long timestamp) {
        if (timestamp == null) {
            return null;
        }
        
        // 创建Calendar实例并设置时区
        Calendar calendar = Calendar.getInstance(BEIJING_TIME_ZONE);
        // 设置时间戳（转换为毫秒）
        calendar.setTimeInMillis(timestamp * 1000L);
        
        return calendar.getTime();
    }
    
  /**
     * 将UNIX时间戳转换为日期对象（年月日）
     * @param timestamp 时间戳（秒）
     * @return 日期部分对应的Date对象
     */
    public static Date toBeijingDate(Long timestamp) {
        if (timestamp == null) {
            return null;
        }
        
        // 获取完整北京时间的Date对象
        Date fullDate = toBeijingDateTime(timestamp);
        
        // 创建Calendar实例并设置时区
        Calendar calendar = Calendar.getInstance(BEIJING_TIME_ZONE);
        calendar.setTime(fullDate);
        
        // 将时间部分清零（保留年月日）
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        
        return calendar.getTime();
    }
    
     /**
     * 将Date对象格式化为指定格式的字符串
     * @param date 日期对象
     * @param pattern 格式模式（如"yyyy-MM-dd HH:mm:ss"）
     * @return 格式化后的字符串
     */
    public static String formatDate(Date date, String pattern) {
        if (date == null) {
            return null;
        }
        
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        sdf.setTimeZone(BEIJING_TIME_ZONE);
        return sdf.format(date);
    }
    
    /**
     * 将字符串解析为Date对象（按北京时间）
     * @param dateStr 日期字符串
     * @param pattern 格式模式
     * @return 解析后的Date对象
     * @throws ParseException
     */
    public static Date parseDate(String dateStr, String pattern) throws ParseException {
        if (dateStr == null) {
            return null;
        }
        
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        sdf.setTimeZone(BEIJING_TIME_ZONE);
        return sdf.parse(dateStr);
    }
}